package itheima02;

import java.io.*;
import java.util.*;

/*
    文本排序
        步骤:
            1.创建BufferedReader类的对象br,绑定源文件csbnosort.txt
            2.创建Map集合对象,键: Integer,值: String
            3.循环按行读取源文件
            3.1 把读取到的当前行进行按照句点(.)切割
            3.2 把切割后的内容存储到Map集合中(数字作为键,文本作为值)
            4.获取Map集合对象中的所有的键对应的Set集合
            5.所有的键对应的Set集合转换成List集合
            6.Collections的sort方法对List集合进行排序
            7.创建BufferedWriter对象bw,绑定目标文件csbsorted.txt
            8.遍历List集合
            8.1 使用当前数字作为键,获取对应的值
            8.2 把键和值,拼接出一行
            8.3 BufferedWriter对象bw调用write方法写入新的一行
            8.4 BufferedWriter对象bw调用write方法写入换行符
            9.关闭流,释放资源


 */
public class Demo04TxtFileSort {
    public static void main(String[] args) throws IOException {
        //1.创建BufferedReader类的对象br,绑定源文件csbnosort.txt
        BufferedReader br = new BufferedReader(new FileReader("day12\\csbnosort.txt"));

        //2.创建Map集合对象,键: Integer,值: String
        Map<Integer,String> map = new HashMap<>();

        //3.循环按行读取源文件
        String line = null;
        while((line = br.readLine())!=null) {
            //3.1 把读取到的当前行进行按照句点(.)切割
            String[] arr = line.split("\\.");
            //3.2 把切割后的内容存储到Map集合中(数字作为键,文本作为值)
            map.put(Integer.parseInt(arr[0]),arr[1]);
        }
        //4.获取Map集合对象中的所有的键对应的Set集合
        Set<Integer> set = map.keySet();

        //5.所有的键对应的Set集合转换成List集合: 利用构造方法
        List<Integer> list = new ArrayList<>(set);

        //6.Collections的sort方法对List集合进行排序
        Collections.sort(list);

        //7.创建BufferedWriter对象bw,绑定目标文件csbsorted.txt
        BufferedWriter bw = new BufferedWriter(new FileWriter("day12\\csbsorted.txt"));

        //8.遍历List集合
        for (Integer num : list) {
            //8.1 使用当前数字作为键,获取对应的值
            String str = map.get(num);

            //8.2 把键和值,拼接出一行
            String line2 = num +"."+ str;

            //8.3 BufferedWriter对象bw调用write方法写入新的一行
            bw.write(line2);
            System.out.println(line2);
            //8.4 BufferedWriter对象bw调用write方法写入换行符
            bw.newLine();
        }
        //9.关闭流,释放资源
        br.close();
        bw.close();

    }
}
